package com.example.common;

import org.springframework.util.StringUtils;

import java.util.Collection;
import java.util.Map;
import java.util.Optional;

public class Util {

    /**
     * 检查对象是否为null或空
     * 支持类型: null, 字符串, 集合（包括List、Set等）, 数组, Map, Optional, 其他对象
     *
     * @param obj 要检查的对象
     * @return 如果对象为null或空则返回true，否则返回false
     */
    @SuppressWarnings("rawtypes")
    public static boolean isNullOrEmpty(Object obj) {
        if (obj == null) {
            return true;
        }

        if (obj instanceof String) {
            //注意：String的trim()方法只能去掉英文空格，无法去掉中文空格；
            // 而无论是英文空格（ ）还是中文全角空格（　），都会被 Character.isWhitespace() 识别为空白字符。
            // 如果传入的字符串只含有空格（不管是英文空格还是中文全角空格），StringUtils.hasText都会返会false。
            return !StringUtils.hasText((String) obj);
        }

        if (obj instanceof CharSequence) {
            return ((CharSequence) obj).length() == 0;
        }

        //包括List、Set等
        if (obj instanceof Collection) {
            return ((Collection) obj).isEmpty();
        }

        if (obj instanceof Map) {
            return ((Map) obj).isEmpty();
        }

        if (obj instanceof Optional) {
            return !((Optional) obj).isPresent();
        }

        if (obj.getClass().isArray()) {
            return java.lang.reflect.Array.getLength(obj) == 0;
        }

        // 对于其他对象类型，默认认为不为空
        return false;
    }

    // 私有构造方法防止实例化
    private Util() {}
}
